home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / msrpc_dcom2.nasl < prev    next >
Text File  |  2005-01-14  |  20KB  |  609 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. # v1.2: use the same requests as MS checktool
  5. # v1.16: use one of eEye's request when a null session can't be established
  6. #
  7. if(description)
  8. {
  9.  script_id(11835);
  10.  script_bugtraq_id(8458, 8460);
  11.  script_cve_id("CAN-2003-0715", "CAN-2003-0528", "CAN-2003-0605");
  12.  if(defined_func("script_xref"))script_xref(name:"IAVA", value:"2003-A-0012");
  13.  
  14.  
  15.  script_version ("$Revision: 1.36 $");
  16.  
  17.  name["english"] = "Microsoft RPC Interface Buffer Overrun (KB824146)";
  18.  script_name(english:name["english"]);
  19.  
  20.  desc["english"] = "
  21. The remote host is running a version of Windows which has a flaw in 
  22. its RPC interface, which may allow an attacker to execute arbitrary code 
  23. and gain SYSTEM privileges. 
  24.  
  25. An attacker or a worm could use it to gain the control of this host.
  26.  
  27. Note that this is NOT the same bug as the one described in MS03-026 
  28. which fixes the flaw exploited by the 'MSBlast' (or LoveSan) worm.
  29.  
  30. Solution: see http://www.microsoft.com/technet/security/bulletin/MS03-039.mspx 
  31. Risk factor : High";
  32.  
  33.  script_description(english:desc["english"]);
  34.  
  35.  summary["english"] = "Checks if the remote host has a patched RPC interface (KB824146)";
  36.  script_summary(english:summary["english"]);
  37.  
  38.  script_category(ACT_GATHER_INFO);
  39.  
  40.  script_copyright(english:"This script is Copyright (C) 2003 Tenable Network Security");
  41.  family["english"] = "Gain root remotely";
  42.  script_family(english:family["english"]);
  43.  script_require_ports("Services/msrpc", 135, 139, 593);
  44.  script_dependencies("smb_nativelanman.nasl"); #KK Liu 10/01/2004
  45.  exit(0);
  46. }
  47.  
  48. #
  49. # The script code starts here
  50. #
  51.  
  52. include("smb_nt.inc");
  53. include("misc_func.inc");
  54.  
  55. function open_wkssvc(soc, uid, tid)
  56. {
  57.  local_var uid_lo, uid_hi, tid_lo, tid_hi, r;
  58.  
  59.  uid_lo = uid % 256;
  60.  uid_hi = uid / 256;
  61.  
  62.  tid_lo = tid % 256;
  63.  tid_hi = tid / 256;
  64.  
  65.  
  66.  r = raw_string(   0x00, 0x00,
  67.             0x00, 0x64, 0xFF, 0x53, 0x4D, 0x42, 0xA2, 0x00,
  68.            0x00, 0x00, 0x00, 0x18, 0x07, 0xC8, 0x00, 0x00,
  69.            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  70.            0x00, 0x00, tid_lo, tid_hi, 0x00, 0x28,uid_lo, uid_hi,
  71.            0x00, 0x00, 0x18, 0xFF, 0x00, 0xDE, 0xDE, 0x00,
  72.            0x0E, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00,
  73.            0x00, 0x00, 0x9F, 0x01, 0x02, 0x00, 0x00, 0x00,
  74.            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  75.            0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00,
  76.            0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00,
  77.            0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x5C, 0x00,
  78.            0x77, 0x00, 0x6b, 0x00, 0x73, 0x00, 0x73, 0x00,
  79.            0x76, 0x00, 0x63, 0x00, 0x00, 0x00);
  80.  
  81.  send(socket:soc, data:r);
  82.  r = smb_recv(socket:soc, length:4096);
  83.  
  84.  if(strlen(r) < 65)return(NULL);
  85.  else
  86.   {
  87.    fid_lo = ord(r[42]);
  88.    fid_hi = ord(r[43]);
  89.    return(fid_lo + (fid_hi * 256));
  90.   }
  91. }
  92.  
  93. function bind(soc, uid, tid, fid)
  94.  local_var uid_lo, uid_hi, tid_lo, tid_hi, fid_lo, fid_hi, r;
  95.  
  96.  uid_lo = uid % 256;
  97.  uid_hi = uid / 256;
  98.  
  99.  tid_lo = tid % 256;
  100.  tid_hi = tid / 256;
  101.  
  102.  fid_lo = fid % 256;
  103.  fid_hi = fid / 256;
  104.  
  105.  r = raw_string(0x00, 0x00,
  106.          0x00, 0x9C, 0xFF, 0x53, 0x4D, 0x42, 0x25, 0x00,
  107.         0x00, 0x00, 0x00, 0x18, 0x07, 0xC8, 0x00, 0x00,
  108.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  109.         0x00, 0x00, tid_lo, tid_hi, 0x00, 0x28, uid_lo, uid_hi,
  110.         0x00, 0x00, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00,
  111.         0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
  112.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 
  113.         0x00, 0x48, 0x00, 0x54, 0x00, 0x02, 0x00, 0x26, 
  114.         0x00, fid_lo, fid_hi, 0x59, 0x00, 0x05, 0x5C, 0x00,
  115.         0x50, 0x00, 0x49, 0x00, 0x50, 0x00, 0x45, 0x00,
  116.         0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
  117.         0x0B, 0x03, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00,
  118.         0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xB8, 0x10,
  119.         0xB8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
  120.         0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x98, 0xD0,
  121.         0xFF, 0x6B, 0x12, 0xA1, 0x10, 0x36, 0x98, 0x33,
  122.         0x46, 0xC3, 0xF8, 0x7E, 0x34, 0x5a, 0x01, 0x00,
  123.         0x00, 0x00, 0x04, 0x5d, 0x88, 0x8a, 0xeb, 0x1c,
  124.         0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, 0x2B, 0x10,
  125.         0x48, 0x60, 0x02, 0x00, 0x00, 0x00);
  126.  
  127.  send(socket:soc, data:r);
  128.  r = smb_recv(socket:soc, length:4096);
  129.  
  130.  
  131.  return r;
  132. }
  133.  
  134.  
  135. function get_wks_info(soc, uid, tid, fid)
  136. {
  137.   local_var uid_lo, uid_hi, tid_lo, tid_hi, fid_lo, fid_hi, r, name, len;
  138.   local_var len_hi, len_lo, uname, i, wks, dce, smb;
  139.  
  140.  uid_lo = uid % 256;
  141.  uid_hi = uid / 256;
  142.  
  143.  tid_lo = tid % 256;
  144.  tid_hi = tid / 256;
  145.  
  146.  fid_lo = fid % 256;
  147.  fid_hi = fid / 256;
  148.  
  149.  name = "\\" + get_host_ip();
  150.  
  151.  for(i=0;i<strlen(name);i++)
  152.  { 
  153.   uname += name[i] + raw_string(0);
  154.  }
  155.  
  156.  uname += raw_string(0, 0);
  157.  if((strlen(name) & 1) == 0)uname += raw_string(0, 0);
  158.  
  159.  len = strlen(name) + 1;
  160.  len_hi = len / 256;
  161.  len_lo = len % 256;
  162.  
  163.  
  164.  wks = raw_string(0xB0, 0x3D, 
  165.            0x7F, 0x00, len_lo, len_hi, 0x00, 0x00, 0x00, 0x00,
  166.           0x00, 0x00, len_lo, len_hi, 0x00, 0x00) + uname +
  167.     raw_string(0x64, 0x00, 0x00, 0x00);
  168.  
  169.  
  170.     
  171.  
  172.  len = 24 + strlen(wks);
  173.  len_hi = len / 256;
  174.  len_lo = len % 256;
  175.  
  176.  dce = raw_string(0x05, 0x00,
  177.             0x00, 0x03, 0x10, 0x00, 0x00, 0x00, len_lo, len_hi,
  178.           0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00,
  179.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00) + wks;
  180.           
  181.  
  182.  
  183.   
  184.  
  185.              
  186.   smbpipe2 = raw_string(    0x05, 0x5C, 0x00,
  187.               0x50, 0x00, 0x49, 0x00, 0x50, 0x00, 0x45, 0x00, 
  188.              0x5C, 0x00, 0x00, 0x00, 0x00, 0x00) + dce;
  189.              
  190.              
  191.   len = strlen(smbpipe2);
  192.   len_hi = len / 256;
  193.   len_lo = len % 256;
  194.           
  195.   smbpipe = raw_string(0x26, 0x00, fid_lo, fid_hi, len_lo, len_hi) + smbpipe2;
  196.              
  197.                                        
  198.  
  199.  smb = raw_string(          0xFF, 0x53, 0x4D, 0x42, 0x25, 0x00,
  200.            0x00, 0x00, 0x00, 0x18, 0x07, 0xc8, 0x00, 0x00,
  201.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  202.           0x00, 0x00, tid_lo, tid_hi, 0x00, 0x28, uid_lo, uid_hi,
  203.           0x00, 0x00, 0x10, 0x00, 0x00, strlen(dce) % 256, strlen(dce) / 256, 0x00,
  204.           0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
  205.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54,
  206.           0x00, strlen(dce) % 256, strlen(dce) / 256, 0x54, 0x00, 0x02, 0x00) + smbpipe;
  207.           
  208.  netbios = raw_string(0, 0, strlen(smb) / 256, strlen(smb) % 256) + smb;
  209.  send(socket:soc, data:netbios);
  210.  r = smb_recv(socket:soc, length:4096);
  211.  if(strlen(r) < 120)return NULL;
  212.  
  213.  len = ord(r[120]) + (ord(r[121]) * 256);
  214.  len --;
  215.  name = NULL;
  216.  
  217.  if ( strlen(r) < (124 + len*2) ) return NULL;
  218.  
  219.  
  220.  for(i=124;i<124 + len*2;i+=2)
  221.  {
  222.   name += r[i];
  223.  }
  224.  return name;
  225. }
  226.  
  227.  
  228. function get_smb_host_name()
  229. {
  230. local_var r, soc, uid;
  231.  
  232. if(!get_port_state(139))return NULL;
  233. soc = open_sock_tcp(139);
  234. if(!soc)return NULL;
  235.  
  236. r = smb_session_request(soc:soc, remote:"*SMBSERVER");
  237. if(!r)return NULL;
  238.  
  239. prot = smb_neg_prot(soc:soc);
  240. if(!prot)return NULL;
  241.  
  242. r = smb_session_setup(soc:soc, login:"", password:"", domain:"", prot:prot);
  243. if(!r)return NULL;
  244.  
  245. uid = session_extract_uid(reply:r);
  246.  
  247. r = smb_tconx(soc:soc, name:"*SMBSERVER", uid:uid, share:"IPC$");
  248. tid = tconx_extract_tid(reply:r);
  249. if(!tid)return NULL;
  250.  
  251. fid = open_wkssvc(soc:soc, uid:uid, tid:tid);
  252.  
  253. r = bind(soc:soc, uid:uid, tid:tid, fid:fid);
  254.  
  255. r = get_wks_info(soc:soc, uid:uid, tid:tid, fid:fid);
  256. close(soc);
  257. return r;
  258. }
  259.  
  260.  
  261.  
  262.  
  263.  
  264. function dcom_recv(socket)
  265. {
  266.  local_var buf, len;
  267.  
  268.  buf = recv(socket:socket, length:10);
  269.  if(strlen(buf) != 10)return NULL;
  270.  
  271.  len = ord(buf[8]);
  272.  len += ord(buf[9])*256;
  273.  buf += recv(socket:socket, length:len - 10);
  274.  return buf;
  275. }
  276.  
  277.  
  278. #-------------------------------------------------------------#
  279.  
  280. function check(req)
  281.  local_var soc, bindstr, error_code, r;
  282.  
  283.  
  284.  soc = open_sock_tcp(port);
  285.  if(!soc)raisewarn(text:"check: open_sock");
  286.  
  287.  bindstr = "05000b03100000004800000001000000d016d016000000000100000000000100a001000000000000c00000000000004600000000045d888aeb1cc9119fe808002b10486002000000";
  288.  send(socket:soc, data:hex2raw(s:bindstr));
  289.  r = dcom_recv(socket:soc);
  290.  if(!r)raisewarn(text:"check: dcom_recv");
  291.  
  292.  send(socket:soc, data:req);
  293.  r = dcom_recv(socket:soc);
  294.  if(!r)return NULL;
  295.  
  296.  close(soc);
  297.  error_code = substr(r, strlen(r) - 4, strlen(r) - 1);
  298.  
  299.  return error_code;
  300. }
  301.  
  302. function check2(req)
  303.  local_var soc,bindstr, error_code, r;
  304.  
  305.  
  306.  soc = open_sock_tcp(port);
  307.  if(!soc)raisewarn(text:"check2: open_sock");
  308.  
  309.  bindstr = "05000b03100000004800000001000000d016d016000000000100000000000100a001000000000000c00000000000004600000000045d888aeb1cc9119fe808002b10486002000000";
  310.  send(socket:soc, data:hex2raw(s:bindstr));
  311.  r = dcom_recv(socket:soc);
  312.  if(!r)raisewarn(text:"check2: dcom_recv");
  313.  
  314.  send(socket:soc, data:req);
  315.  r = dcom_recv(socket:soc);
  316.  close(soc);
  317.  if(!r)return NULL;
  318.  
  319.  
  320.  error_code = substr(r, strlen(r) - 8, strlen(r) - 5);
  321.  return error_code;
  322. }
  323.  
  324.  
  325. function check3(req)
  326. {
  327.  local_var soc,bindstr, error_code, r;
  328.  
  329.  
  330.  soc = open_sock_tcp(port);
  331.  if(!soc)raisewarn(text:"check3: open_sock");
  332.  
  333.  bindstr = "05000b03100000004800000002000000d016d016000000000100000001000100b84a9f4d1c7dcf11861e0020af6e7c5700000000045d888aeb1cc9119fe808002b10486002000000";
  334.  
  335.  
  336.  
  337.  send(socket:soc, data:hex2raw(s:bindstr));
  338.  r = dcom_recv(socket:soc);
  339.  if(!r)raisewarn(text:"check3: dcom_recv");
  340.  
  341.  send(socket:soc, data:req);
  342.  r = dcom_recv(socket:soc);
  343.  close(soc);
  344.  if(!r)return NULL;
  345.  
  346.  
  347.  error_code = substr(r, strlen(r) - 24, strlen(r) - 21);
  348.  return error_code;
  349. }
  350.  
  351.  
  352. function check4(req)
  353. {
  354.   local_var soc,bindstr, error_code, r;
  355.  
  356.  
  357.  soc = open_sock_tcp(port);
  358.  if(!soc)raisewarn(text:"check4: open_sock");
  359.  
  360.  bindstr = "05000b03100000004800000002000000d016d016000000000100000001000100b84a9f4d1c7dcf11861e0020af6e7c5700000000045d888aeb1cc9119fe808002b10486002000000";
  361.  
  362.  
  363.  
  364.  send(socket:soc, data:hex2raw(s:bindstr));
  365.  r = dcom_recv(socket:soc);
  366.  if(!r)raisewarn(text:"check4: dcom_recv");
  367.  
  368.  send(socket:soc, data:req);
  369.  r = dcom_recv(socket:soc);
  370.  if(!r)return NULL;
  371.  close(soc);
  372.  
  373.  
  374.  error_code = substr(r, strlen(r) - 24, strlen(r) - 21);
  375.  return error_code;
  376. }
  377.  
  378.  
  379. function check6(req)
  380. {
  381.   local_var soc,bindstr, error_code, r;
  382.  
  383.  
  384.  soc = open_sock_tcp(port);
  385.  if(!soc)raisewarn(text:"check6: open_sock");
  386.  
  387.  bindstr = "05000b031000000048000000deadbeefd016d016000000000100000000000100b84a9f4d1c7dcf11861e0020af6e7c5700000000045d888aeb1cc9119fe808002b10486002000000";
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  send(socket:soc, data:hex2raw(s:bindstr));
  394.  r = dcom_recv(socket:soc);
  395.  if(!r)raisewarn(text:"check6: dcom_recv");
  396.  
  397.  send(socket:soc, data:req);
  398.  r = dcom_recv(socket:soc);
  399.  close(soc);
  400.  if(!r)return NULL;
  401.  
  402.  
  403.  error_code = substr(r, strlen(r) - 24, strlen(r) - 21);
  404.  return error_code;
  405. }
  406.  
  407. function req5()
  408. {
  409.  local_var name, buf, uname;
  410.  
  411.  
  412.  name = get_smb_host_name();    
  413.  if(!name)return NULL;
  414.  
  415.  name = "\\" + name + "\C$\";
  416.  
  417.  len = strlen(name) + 1;
  418.  
  419.  for(i=0;i<strlen(name);i++)
  420.  { 
  421.   uname += name[i] + raw_string(0);
  422.  }
  423.  
  424.  if((strlen(name) & 1) == 0)  uname += raw_string(0, 0);
  425.  
  426.  
  427.  len_lo = len % 256;
  428.  len_hi = len / 256;
  429.  
  430.  
  431.  
  432.  buf = raw_string(0x05, 0x00,
  433.      0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  434.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  435.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  436.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x96,
  437.     0x95, 0x2A, 0x8c, 0xDA, 0x6D, 0x4a, 0xb2, 0x36,
  438.     0x19, 0xBC, 0xAF, 0x2C, 0x2d, 0xea, 0x30, 0xeb,
  439.     0x8F, 0x00, len_lo, len_hi, 0x00, 0x00, 0x00, 0x00,
  440.     0x00, 0x00, len_lo, len_hi, 0x00, 0x00) + uname +
  441.     raw_string(
  442.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
  443.     0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
  444.     0x00, 0x00, 0xdc, 0xea, 0x8f, 0x00, 0x01, 0x00,
  445.     0x00, 0x00, 0x95, 0x96, 0x95, 0x2A, 0x8C, 0xDA,
  446.     0x6D, 0x4a, 0xb2, 0x36, 0x19, 0xbc, 0xaf, 0x2c,
  447.     0x2d, 0xea, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
  448.     0x00, 0x00, 0x5C, 0x00);
  449.  
  450.  len  = strlen(buf);
  451.  len_lo = len % 256;
  452.  len_hi = len / 256;
  453.  tlen = len + 24;
  454.  tlen_lo = tlen % 256;
  455.  tlen_hi = tlen / 256;
  456.  head = raw_string(0x05, 0x00,
  457.      0x00, 0x03, 0x10, 0x00, 0x00, 0x00, tlen_lo, tlen_hi,
  458.     0x00, 0x00, 0x02, 0x00, 0x00, 0x00, len_lo,len_hi,
  459.     0x00, 0x00, 0x01, 0x00, 0x00, 0x00) + buf;
  460.  
  461.  return head;
  462. }
  463.  
  464. #---------------------------------------------------------------#
  465. function raisewarn(text)
  466. {
  467. # results were indeterminate, stop false MS03-026 detection
  468.  data = string("Network problems stopped us from finding out if the host is vulnerable to MS03-039 or not. Diagnostic = ", text);
  469.  set_kb_item(name:"SMB/KB824146", value:TRUE); 
  470.  security_warning(port:port, data:data);
  471.  exit(0);
  472. }
  473. #---------------------------------------------------------------#
  474.  
  475.  
  476. port = 135;
  477. if(!get_port_state(port))port = 593;
  478. else {
  479.  soc = open_sock_tcp(port);
  480.  if(!soc)port = 593;
  481.  else close(soc);
  482. }
  483. if(!get_port_state(port))exit(0);
  484.  
  485. target = get_host_ip();
  486. # Determine if we the remote host is running Win95/98/ME
  487. bindwinme = "05000b03100000004800000053535641d016d016000000000100000000000100e6730ce6f988cf119af10020af6e72f402000000045d888aeb1cc9119fe808002b10486002000000";
  488. soc = open_sock_tcp(port);
  489. if(!soc)exit(0);
  490. send(socket:soc, data:hex2raw(s:bindwinme));
  491. rwinme = dcom_recv(socket:soc);
  492. if(!rwinme)raisewarn(text:"main: dcom_recv");
  493. close(soc);
  494. lenwinme = strlen(rwinme);
  495. stubwinme = substr(rwinme, lenwinme-24, lenwinme-21);
  496.  
  497. # This is Windows 95/98/ME which is not vulnerable
  498. if("02000100" >< hexstr(stubwinme))exit(0);
  499.  
  500.  
  501. #----------------------------------------------------------------#
  502.  
  503. REGDB_CLASS_NOTREG = "5401048000";
  504. CO_E_BADPATH = "0400088000";
  505. NT_QUOTE_ERROR_CODE_EQUOTE = "00000000";
  506.  
  507.  
  508.  
  509. #
  510. req1 = "0500000310000000b00300000100000098030000000004000500020000000000000000000000000000000000000000000000000000000000000000009005140068030000680300004d454f5704000000a201000000000000c0000000000000463803000000000000c0000000000000460000000038030000300300000000000001100800ccccccccc80000000000000030030000d80000000000000002000000070000000000000000000000000000000000000018018d00b8018d000000000007000000b901000000000000c000000000000046ab01000000000000c000000000000046a501000000000000c000000000000046a601000000000000c000000000000046a401000000000000c000000000000046ad01000000000000c000000000000046aa01000000000000c0000000000000460700000060000000580000009000000058000000200000006800000030000000c000000001100800cccccccc5000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100800cccccccc4800000000000000005d889aeb1cc9119fe808002b1048601000000000000000000000000100000000000000b8470a005800000005000600010000000000000000000000c000000000000046cccccccc01100800cccccccc80000000000000000000000000000000000000000000000020ba09000000000060000000600000004d454f5704000000c001000000000000c0000000000000463b03000000000000c000000000000046000000003000000001000100673c70941333fd4687244d093988939d0200000000000000000000000000000000000000000000000100000001100800cccccccc480000000000000000000000b07e09000000000000000000f0890a0000000000000000000d000000000000000d000000730061006a00690061006400650076005f0078003800360000000800cccccccc01100800cccccccc10000000000000000000000000000000000000000000000001100800cccccccc5800000000000000c05e0a000000000000000000000000001b000000000000001b0000005c005c0000005c006a00690061006400650076005f007800000036005c007000750062006c00690063005c004100410041004100000000000100150001100800cccccccc200000000000000000000000905b09000200000001006c00c0df0800010000000700550000000000";
  511.  
  512. req2 = "0500000310000000b00300000200000098030000000004000500020000000000000000000000000000000000000000000000000000000000000000009005140068030000680300004d454f5704000000a201000000000000c0000000000000463803000000000000c0000000000000460000000038030000300300000000000001100800ccccccccc80000000000000030030000d80000000000000002000000070000000000000000000000000000000000000018018d00b8018d000000000007000000b901000000000000c000000000000046ab01000000000000c000000000000046a501000000000000c000000000000046f601000000000000c000000000000046ff01000000000000c000000000000046ad01000000000000c000000000000046aa01000000000000c0000000000000460700000060000000580000009000000058000000200000006800000030000000c000000001100800cccccccc5000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100800cccccccc4800000000000000005d889aeb1cc9119fe808002b1048601000000000000000000000000100000000000000b8470a005800000005000600010000000000000000000000c000000000000046cccccccc01100800cccccccc80000000000000000000000000000000000000000000000020ba09000000000060000000600000004d454f5704000000c001000000000000c0000000000000463b03000000000000c000000000000046000000003000000001000100673c70941333fd4687244d093988939d0200000000000000000000000000000000000000000000000100000001100800cccccccc480000000000000000000000b07e09000000000000000000f0890a0000000000000000000d000000000000000d000000730061006a00690061006400650076005f0078003800360000000800cccccccc01100800cccccccc10000000000000000000000000000000000000000000000001100800cccccccc5800000000000000c05e0a000000000000000000000000001b000000000000001b0000005c005c0000005c006a00690061006400650076005f007800000036005c007000750062006c00690063005c004100410041004100000000000100150001100800cccccccc200000000000000000000000905b09000200000001006c00c0df0800010000000700550000000000";
  513.  
  514.  
  515. req3  = "05000e03100000004800000003000000d016d01605af00000100000001000100b84a9f4d1c7dcf11861e0020af6e7c5700000000045d888aeb1cc9119fe808002b10486002000000";
  516. req4 = "05000003100000009a00000003000000820000000100000005000200000000000000000000000000000000000000000000000000000000009596952a8cda6d4ab23619bcaf2c2dea34eb8f000700000000000000070000005c005c004d0045004f00570000000000000000005c0048005c0048000100000058e98f00010000009596952a8cda6d4ab23619bcaf2c2dea01000000010000005c00";
  517.  
  518.  
  519.  
  520.  
  521.  
  522. #display(hex2raw(s:req));
  523. #exit(0);
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530. error1 = check(req:hex2raw(s:req1));
  531. error2 = check(req:hex2raw(s:req2)); 
  532.  
  533.  
  534. error3 = check(req:hex2raw(s:req3));
  535. error4 = check2(req:hex2raw(s:req4));
  536. error5 = NULL;
  537. null_session_failed = 0;
  538.  
  539. if(hexstr(error1) == "00000000")
  540.  {
  541.   req = req5();
  542.   if(req)
  543.       error5 = check4(req:req);
  544.   else null_session_failed = 1;    
  545.  }
  546.  
  547. #display(target, " error1=", hexstr(error1), "\n");
  548. #display(target, " error2=", hexstr(error2), "\n");
  549. #display(target, " error3=", hexstr(error3), "\n");
  550. #display(target, " error4=", hexstr(error4), "\n");
  551. #display(target, " error5=", hexstr(error5), "\n");
  552.  
  553.  
  554. #KK 10/01/2004 - check if os = Windows NT 4.0 reset error4
  555.     kb = get_kb_item("Host/OS/smb");
  556.     if ( kb ) 
  557.     {
  558.        if ("Windows 4.0" >< kb  ) { error4 = ""; }
  559.     }
  560. #KK 
  561.  
  562. if(hexstr(error1) == "00000000" &&
  563.    hexstr(error2) == "00000000" &&
  564.    (hexstr(error4) == "1c00001c" || hexstr(error4) == "0300011c") &&
  565.    isnull(error5)){
  566.      set_kb_item(name:"SMB/KB824146", value:TRUE);
  567.     exit(0); # HP-UX dced or WinXP SP2
  568.     }
  569.  
  570.  
  571. #error5 = NULL;
  572. #null_session_failed = 1;
  573.  
  574.  
  575. if(hexstr(error2) == hexstr(error1))
  576. {
  577.  vulnerable = 1;
  578.  if(hexstr(error1) == "05000780")exit(0); # DCOM disabled
  579.  if(hexstr(error1) == "00000000")
  580.  {
  581.   if( hexstr(error5) == "04000880" )vulnerable = 0;
  582.   else if( null_session_failed || hexstr(error5) == "05000780") { 
  583.    req6 = "0500000310000000c600000000000000ae000000000000000500010000000000000000005b4e65737375735d5b4e65737375735d000000004e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e680f0b001e000000000000001e0000005c005c00410000005c000000630024005c0074006500730074005f0032003000300033005f006e00650073007300750073002e00740078007400000000000000020000000200000001000000b8eb0b00010000000000000000000000000000000000000001000000010000000700";
  584.    error6 = check6(req:hex2raw(s:req6));
  585.    req7 = "0500000310000000c600000000000000ae000000000000000500010000000000000000005b4e65737375735d5b4e65737375735d0000000048484848484848484848484848484848680f0b001e000000000000001e0000005c005c003100370032002e00340032002e003100340032002e0031003400320000005c0074006500730074005f004e0065007300730075007300000000000000020000000200000001000000b8eb0b00010000000000000000000000000000000000000001000000010000000700";
  586.    error7 = check6(req:hex2raw(s:req7));
  587.    if(hexstr(error6) == "54010480" && hexstr(error7) == "04000880")vulnerable = 0;
  588.    #display(target, " error6=", hexstr(error6), "\n");
  589.    #display(target, " error7=", hexstr(error7), "\n");
  590.    if(hexstr(error6) == hexstr(error7) &&
  591.       hexstr(error6) == "05000780")exit(0); # Dcom disabled
  592.    
  593.   }
  594.  }
  595. }
  596.   
  597.  
  598. if(vulnerable)
  599. {
  600.  security_hole(port);
  601. }
  602. else {
  603.  set_kb_item(name:"SMB/KB824146", value:TRUE);
  604. }
  605.  
  606.